package com.weijian.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.weijian.common.result.ApiResponse;
import com.weijian.dal.entity.Task;
import com.weijian.dal.enums.TaskStatus;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;

import java.util.List;

/**
 * 任务服务接口
 */
public interface TaskService extends IService<Task> {
    
    /**
     * 创建新任务
     * 
     * @return 任务ID
     */
    String createTask();
    
    /**
     * 创建新任务并关联指定dataId的数据
     * 
     * @param dataId 数据ID
     * @return 任务ID
     */
    String createTask(Integer dataId);
    
    /**
     * 更新任务状态
     * 
     * @param taskId 任务ID
     * @param status 新的任务状态
     */
    void updateTaskStatus(String taskId, TaskStatus status);
    
    /**
     * 更新任务状态和结果信息
     * 
     * @param taskId 任务ID
     * @param status 新的任务状态
     * @param message 任务结果或错误信息
     */
    void updateTaskStatus(String taskId, TaskStatus status, String message);
    
    /**
     * 根据数据ID查询关联的任务列表
     * 
     * @param dataId 数据ID
     * @return 任务列表
     */
    List<Task> getTasksByDataId(Integer dataId);
    
    /**
     * 注册任务的SSE连接
     *
     * @param taskId 任务号
     * @return SseEmitter
     */
    SseEmitter registerTask(String taskId);

    /**
     * 向客户端发送任务状态更新
     *
     * @param taskId 任务号
     * @param result 任务执行结果
     */
    void sendTaskStatus(String taskId, ApiResponse<String> result);

    /**
     * 根据任务编号获取任务信息
     *
     * @param taskNo 任务编号
     * @return 任务信息
     */
    Task getByTaskNo(String taskNo);
}